レイクハウスプラットフォーム「Dremio Cloud」を試してみた

レイクハウスプラットフォーム「Dremio Cloud」を試してみた

Clock Icon2024.09.09

こんにちは!データ事業本部 サービスソリューション部の大高です。

みなさんは「レイクハウス」とは何かご存知でしょうか?私はよく理解しきれていません。

レイクハウスとは?

「データレイクとデータウェアハウスの長所を兼ね備え、ACIDトランザクションやタイムトラベルもできるもの」という認識をしていますが、具体的にどのようなものなのかは、ふわっとしたイメージしかありません。

なお、個人的によく利用させていただいている Snowflake の、以下の「データレイクハウスとは何か」ガイドページを参照すると、以下のように記載されていました。

データレイクハウスアーキテクチャは、オブジェクトストレージのファイルにテーブルメタデータを追加することで、データレイクとデータウェアハウスの長所を組み合わせるようになっています。この追加メタデータは、タイムトラベル、ACIDトランザクション、優れたプルーニング、スキーマ適用、データウェアハウスで一般的であるものの、データレイクには通常は備わっていない機能などの追加機能をデータレイクに提供します。

https://www.snowflake.com/ja/guides/what-data-lakehouse/

これを踏まえると、AWSにおいては AWS Lake Formation が相当するサービスになるかと思います。AWS Lake Formationについては、DevelopersIO 内の以下の記事一覧もご参照ください。

https://dev.classmethod.jp/tags/aws-lake-formation/

Dremio Cloud とは?

さて、そんな「レイクハウス」をフルマネージドなクラウドプラットフォームとして提供してくれるのが Dremio Cloud です。

https://www.dremio.com/

今回は、この Dremio Cloud を使ってレイクハウスへの理解を深めたいと思います。

事前準備

今回はAWSを利用したいのですが、以下のページにあるように「事前準備」としてAWSアカウントとVPC、サブネットが必要となります。

https://docs.dremio.com/cloud/get-started/prerequisites/

こちらのドキュメントに記載されているように、作成しておきます。なお、リージョンはサポートされている us-west-2 のオレゴンリージョンを利用することにしました。

今回は以下のようなCloudFormationテンプレートを用意して作成してみました。

AWSTemplateFormatVersion: "2010-09-09"
Description: "Network Template."

Parameters:
  ProjectName:
    Type: String
    Default: "project"

  SubProjectName:
    Type: String
    Default: "sub"

  VpcCidr:
    Type: String
    Default: "10.0.0.0/16"

  PublicSubnet1Cidr:
    Type: String
    Default: "10.0.0.0/24"

  PublicSubnet2Cidr:
    Type: String
    Default: "10.0.1.0/24"

Resources:
  Vpc:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: !Ref VpcCidr
      EnableDnsSupport: true
      EnableDnsHostnames: true
      Tags:
        - Key: Name
          Value: !Sub ${ProjectName}-${SubProjectName}-vpc

  InternetGateway:
    Type: AWS::EC2::InternetGateway
    DependsOn: Vpc
    Properties:
      Tags:
        - Key: Name
          Value: !Sub ${ProjectName}-${SubProjectName}-ig

  AttachGateway:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      VpcId: !Ref Vpc
      InternetGatewayId: !Ref InternetGateway

  PublicSubnet1:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: !Ref PublicSubnet1Cidr
      VpcId: !Ref Vpc
      AvailabilityZone:
        Fn::Select:
          - "0"
          - Fn::GetAZs: ""
      Tags:
        - Key: Name
          Value: !Sub ${ProjectName}-${SubProjectName}-public-subnet-1

  PublicRouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref Vpc
      Tags:
        - Key: Name
          Value: !Sub ${ProjectName}-${SubProjectName}-public-rt

  RouteViaIg:
    Type: AWS::EC2::Route
    DependsOn:
      - AttachGateway
    Properties:
      RouteTableId: !Ref PublicRouteTable
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref InternetGateway

  PublicSubnet1RouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref PublicSubnet1
      RouteTableId: !Ref PublicRouteTable

  PublicSubnet2:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: !Ref PublicSubnet2Cidr
      VpcId: !Ref Vpc
      AvailabilityZone:
        Fn::Select:
          - "1"
          - Fn::GetAZs: ""
      Tags:
        - Key: Name
          Value: !Sub ${ProjectName}-${SubProjectName}-public-subnet-2

  PublicSubnet2RouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref PublicSubnet2
      RouteTableId: !Ref PublicRouteTable

  S3VpcEndpoint:
    Type: AWS::EC2::VPCEndpoint
    Properties:
      RouteTableIds:
        - !Ref PublicRouteTable
      VpcId: !Ref Vpc
      ServiceName: !Sub com.amazonaws.${AWS::Region}.s3

Outputs:
  VpcId:
    Value: !Ref Vpc

  PublicSubnet1Id:
    Value: !Ref PublicSubnet1

  PublicSubnet2Id:
    Value: !Ref PublicSubnet2

Dremio Cloud をはじめる

では準備ができたので、さっそく使ってみます。

サインアップ

まずは、以下のページからサインアップをします。

https://www.dremio.com/get-started/

今回は S3 のデータを参照したいので「Preferred Deployment Method」は「I would like to test out a fully managed Data Lakehouse on AWS or Azure cloud storage」を選択しました。

Tried-out-the-Lake-House-Platform-Dremio-Cloud_001

アカウント作成を進めると、SSOかメールアドレスのどちらで作成するかを聞かれます。今回はメールアドレスでの作成としました。また、画面の右上に「North America」と表示されているプルダウンがありますが、ここからコントロールプレーンをどのリージョンに配置するか選択できます。2024/09 時点では「North America」または「Europe」が選択可能でした。今回は「North America」のままとします。

Tried-out-the-Lake-House-Platform-Dremio-Cloud_002

アカウント作成を進め、パスワードや組織名の設定を済ませると利用が開始できるようになります。

Tried-out-the-Lake-House-Platform-Dremio-Cloud_003

プロジェクトを作成する

開始画面では利用用途を聞かれているので「Cloud Apache Iceberg Lakehouse platform」にしました。これを進めていくと、ウィザード形式でプロジェクトが作成されていきます。

必要項目を入力しながら進めていきますが、ここの画面で「Launch CFT →」をクリックすると、AWS CloudFormation の管理コンソール画面が開くので、事前にテンプレートを適用したいAWSアカウントをブラウザで開いておいてから、ボタンをクリックします。

Tried-out-the-Lake-House-Platform-Dremio-Cloud_004

すると、AWSのCloudFormation管理コンソールが開くので、パラメータに事前に作成しておいたVPCやサブネットを指定して、スタックの作成を進めます。
今回はAWSのリージョンは us-west-2 (オレゴン) を利用することにしました。

作成を始めると、dremio側の画面が以下のように表示されるので、すべて完了するまでしばらく待ちます。

Tried-out-the-Lake-House-Platform-Dremio-Cloud_005

CloudFormationテンプレートの適用が完了すると、Dremioの画面が自動的に Dremio Sonor の画面に遷移します。これでプロジェクトの作成も完了です。

Tried-out-the-Lake-House-Platform-Dremio-Cloud_006

サンプルデータに対してクエリを投げてみる

プロジェクトができたので、さっそくサンプルデータにクエリを投げてみました。

プロジェクトを作成した段階で、クエリは画面左側にあるサンプルデータに対して発行することができます。以下のようなSELECTクエリを発行します。

SELECT * FROM SampleDB."NYC-weather"

すると、以下のようにクエリ結果が表示されます。

Tried-out-the-Lake-House-Platform-Dremio-Cloud_007

今回は試せなかったのですが、画面右側の「Launch BI tool」から、BIツールでデータを見ることもできるようです。

また、画面の右下ではテーブルに対して Wiki ページを書くこともできます。データの概要をまとめておくのに役立ちそうですね。

更にもう少し、複雑なクエリとしてJOINしたクエリなども発行できます。

WITH trips AS (
  SELECT * FROM Samples."samples.dremio.com"."NYC-taxi-trips-iceberg"
),
weather AS (
  SELECT * FROM SampleDB."NYC-weather"
)
SELECT
  *
FROM
  trips
INNER JOIN weather ON
  trips.pickup_datetime = weather."date"
;

データソースの追加

ここでは詳細は省きますが、様々なデータソースを追加することもできます。

画面左側の「Get started with Dremio > Add own your datasource」からデータソース追加ができます。

Tried-out-the-Lake-House-Platform-Dremio-Cloud_008

ダイアログに表示されているように、 S3 や Redshift などの様々なデータをデータソースとして追加できます。

Tried-out-the-Lake-House-Platform-Dremio-Cloud_009

これらも前述のサンプルデータと同様に、データをSQLクエリでSELECTすることができるので、様々なデータソースのデータを横断的に利用することが可能ですね。

ここで困った

今回 Dremio Cloud を試す際に、以下の困ったことがありました。

us-east-1 に対して、CloudFormation テンプレートを適用するとエラーが発生してスタックが作成できない

エラーメッセージとしては、以下の Dremio のトラブルシューティング ドキュメントにもある以下のエラーが発生していました。

Problem: Your project creation fails during the CFT or manual setup, and you see this error: Received response status [FAILED] from custom resource. Message returned: Reason: INVALID_ARGUMENT: Unable to create project <project-name>. Cannot access the project store. Check the path (<path>) and credentials (<credentials>) are valid. Please go back to Dremio UI and retry. (<RequestId>)

https://docs.dremio.com/cloud/help-support/appendix/troubleshooting-cloud-resources/

STSのエンドポイントは有効化されていたのですが、どうもうまく通信がされないようでエラーが発生しており、結局は構築先のリージョンを us-west-2 にすることで解決しました。

このようなトラブルシューティングのドキュメントが充実しているのは、とても優しいですね。

まとめ

以上、レイクハウスプラットフォーム「Dremio Cloud」を使ってみました。

セットアップは少しAWS側との設定でハマってしまったのですが、解決すればすぐに利用可能でした。公式にCloudFormationのテンプレートが用意されており、テンプレートを適用するだけになっているのが嬉しいですね。

また、各データソースを接続して横断的にデータを扱えるのは強いと思いました。データについてもIceberg形式で扱えるのでACIDトランザクションを使えるのも良かったです。

どなたかのお役に立てば幸いです。それでは!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.